home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / DRIVES.SWG / 0038_Valid Drives Function.pas < prev    next >
Pascal/Delphi Source File  |  1993-08-23  |  3KB  |  103 lines

  1. (*
  2. ===========================================================================
  3.  BBS: Beta Connection
  4. Date: 08-08-93 (11:19)             Number: 2152
  5. From: MARTIN RICHARDSON            Refer#: NONE
  6.   To: ALL                           Recvd: NO
  7. Subj: VALID DRIVES FUNCTION          Conf: (232) T_Pascal_R
  8. ---------------------------------------------------------------------------
  9. Thanks for the help I got with my @Result question.  Using the resposes,
  10. I have fixed the routine.  Here is the result, a clean way to find all
  11. valid drives w/o having to do any kind of disk access:
  12. }
  13. {*****************************************************************************
  14.  * Function ...... Drives
  15.  * Purpose ....... To return a string containing the valid drives for the
  16.  *                 current system.
  17.  * Parameters .... None
  18.  * Returns ....... A string of the valid drives.
  19.  * Notes ......... None
  20.  * Copyright ..... None.  This routine is public domain.
  21.  * Author ........ Martin Richardson
  22.  * Date .......... March 3, 1993
  23.  *                 August 6, 1993 (fix)
  24.  *****************************************************************************}
  25. *)
  26.  
  27. USES CRT;
  28.  
  29. FUNCTION Drives: STRING;
  30. VAR
  31.    DriveInfo: ARRAY[1..2] OF CHAR;
  32.    Buffer: ARRAY[1..40] OF CHAR;
  33.    DriveString: ARRAY[1..25] OF CHAR;
  34. BEGIN ASM
  35.      PUSH   SI
  36.      PUSH   DI
  37.      PUSH   ES
  38.      PUSH   DS
  39.  
  40.      MOV    SI, SS
  41.      MOV    DS, SI
  42.      MOV    SI, OFFSET DriveInfo
  43.      PUSH   DS
  44.      POP    ES
  45.      MOV    DI, OFFSET Buffer
  46.      MOV    BX, OFFSET DriveString
  47.  
  48.      MOV    BYTE PTR [SI], '#'
  49.      XOR    CX, CX
  50.  
  51. @1:
  52.      INC    BYTE PTR [SI]               { Next Letter }
  53.      MOV    BYTE PTR [SI+1], ':'
  54.      MOV    AX, $2906
  55.      INT    21h
  56.  
  57.      MOV    SI, OFFSET DriveInfo
  58.      CMP    AL, $FF
  59.      JE     @2
  60.  
  61.      INC    CX
  62.      PUSH   CX
  63.      MOV    CL, BYTE PTR DS:[SI]
  64.      MOV    [BX], CL
  65.      INC    BX
  66.      POP    CX
  67.  
  68. @2:
  69.      CMP    BYTE PTR [SI], 'Z'
  70.      JNE    @1
  71.  
  72.      MOV    SI, OFFSET DriveString
  73.      LES    DI, @Result
  74.      INC    DI
  75.      REP    MOVSB
  76.  
  77.      XCHG   AX, DI
  78.      MOV    DI, WORD PTR @Result
  79.      SUB    AX, DI
  80.      DEC    AX
  81.      STOSB
  82.  
  83.      POP    DS
  84.      POP    ES
  85.      POP    DI
  86.      POP    SI
  87. END; END;
  88.  
  89. BEGIN
  90. ClrScr;
  91. WriteLn(DRives);
  92. Readkey;
  93. END.
  94.  
  95. I have not yet gotten this to bomb.  If anyone does, PLEASE LET ME KNOW!
  96.  
  97. -Martin
  98.  
  99.  * SLMR 2.1a * And then the Nun said "No, give me the bannanna!"
  100. ---
  101.  * deltaComm Online 919-481-9399 - 10 lines
  102.  * PostLink(tm) v1.06  DELTA (#22) : RelayNet(tm) HUB
  103.